#ifndef RING_BUF_H
#define RING_BUF_H

#ifdef  __cplusplus  
extern "C" {  
#endif 

#include "qc_type.h"

typedef struct {
	char* buf;
	qc_u32 capacity;
	volatile qc_u32 read_index;
	volatile qc_u32 write_index;
}T_RingBuf,*PT_RingBuf;

qc_bool init_ring_buf(PT_RingBuf fd, qc_u32 size);
//qc_bool read_byte(PT_RingBuf fd, qc_8* _byte);
//qc_bool write_byte(PT_RingBuf fd, qc_8 _byte);
qc_bool read_bytes(PT_RingBuf fd, char* byte_buf, qc_32 nbytes);
qc_bool write_bytes(PT_RingBuf fd, char* byte_buf, qc_32 nbytes);
qc_bool is_empty(PT_RingBuf fd);
qc_bool is_full(PT_RingBuf fd);
qc_32 write_able_bytes(PT_RingBuf fd);
qc_32 read_able_bytes(PT_RingBuf fd);
void release(PT_RingBuf fd);

#ifdef  __cplusplus  
}  
#endif

#endif 
